﻿#define _CRT_SECURE_NO_WARNINGS 1
//// C++兼容C中struct的⽤法
//typedef struct ListNodeC
//{
//    struct ListNodeC* next;
//    int val;
//}LTNode;
//
//
//// C++中，类名就表示类型，不再需要typedef，ListNodeCPP就可以代表类型
//struct ListNodeCPP
//{
//    void Init(int x)
//    {
//        next = nullptr;
//        val = x;
//    }
//    ListNodeCPP* next; // 如果是C语言，这里必须写成struct ListNodeCPP* next;
//    int val;
//};
//
//int main()
//{
//    ListNodeCPP* p1 = nullptr;
//    p1->Init(1);
//    return 0;
//}

//#include"Stack.h"
//int main()
//{
//	Stack s;
//	s.Init();
//	s.Push(1);
//	s.Push(2);
//	s.Destroy();
//	return 0;
//}



//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//
//
//	// 这⾥只是声明，没有开辟空间
//	int _year; // 声明
//	int _month; // 声明
//	int _day; // 声明
//};
//
//
//
//int main()
//{
//
//	// 通过Date类实例化出对象d1和d2
//	Date d1;
//	Date d2;
//	// 这两个Init函数的地址是相同的，
//	d1.Init(2024, 3, 31);
//	d2.Init(2024, 4, 15);
//
//	// 编译器会为这两个_year分配不同的空间
//	d1._year++;
//	d2._year++;
//	
//	d1.Print();
//	d2.Print();
//	return 0;
//}



//#include<iostream>
//using namespace std;
//// 计算⼀下通过类A/B/C实例化的对象是多⼤？
//class A
//{
//public:
//	void Print()
//	{
//		cout << _ch << endl;
//	}
//private:
//	char _ch;
//	int _i;
//};
//
//class B
//{
//public:
//	void Print()
//	{
//		//...
//	}
//};
//
//class C
//{
//};
//int main()
//{
//	A s1;
//	B s2;
//	C s3;
//	cout << sizeof(s1) << endl; // 8
//	cout << sizeof(s2) << endl; // 1 
//	cout << sizeof(s3) << endl; // 1
//	/*
//	我们发现没有成员变量的B和C类实例化的对象的大小是1个字节，
//	为什么没有成员变量还要给1个字节呢？
//	因为如果⼀个字节都不给，怎么表⽰对象存在过呢！所以这⾥给1字节，纯粹是为了占位标识，表示对象存在。
//	*/ 
//	return 0;
//}


//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	
//	void Init(int year, int month, int day)
//	{
//		/*
//		   经过编译后，Init函数的原型如下：
//		   void Init(Date* const this, int year, int month, int day)
//		*/
//
//		// this = nullptr; // 编译报错：this指针被const修饰了,不能修改this指针指向的对象，但可以修改该对象中的内容(比如修改_year、_month、_day)
//	   
//		this->_year = year; // 等价于_year = year;
//		this->_month = month;// 等价于_month = month;
//		this->_day = day;// 等价于_day = day;
//	}
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	// Date类实例化出对象d1和d2
//    Date d1;
//	Date d2;
//	
//	d1.Init(2024, 3, 31);
//	d2.Init(2025, 7, 5);
//	/*
//	d1与d2调用成员函数Init时，经过编译后的原型为
//    d1.Init(&d1,2024, 3, 31);
//    d1.Init(&d2,2024, 3, 31);
//	*/
//	cout << d1._year<<endl; // 2024
//	cout << d2._year<<endl; // 2025
//	return 0;
//}


#include<iostream>
using namespace std;
class A
{
public:
	void Print()
	{
		cout << "A::Print()" << endl;
	}
private:
	int _a;
};
int main()
{
	A* p = nullptr;
	p->Print();

	return 0;
}